# 绘制柱状图5-8
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_excel('产品销售表.xlsx',sheet_name=['第1分店','第2分店','第3分店'])
df_list = []
df_list.append(df['第1分店'])
df_list.append(df['第2分店'])
df_list.append(df['第3分店'])
width = 0.3
for i in range(len(df_list)):
    df_temp = df_list[i]
    df_temp.dropna(axis=0,subset=['数量'],inplace=True)
    df_temp.drop_duplicates(inplace=True)
    df_temp = df_temp.groupby('季度').agg('sum')
    x = df_temp.index
    height = df_temp['销售额（万元）']
    plt.bar(x + width * i,height,width)
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.ylabel('销售额/万元')
plt.legend(['第一分店','第2分店','第3分店'])
plt.xticks([1,2,3,4],['第1季度','第2季度','第3季度','第4季度',])
plt.title('每个季度不同分店销售额柱状图')
plt.show()

# 练习题
import matplotlib.pyplot as plt
import pandas as pd
# 1. 准备数据（可以从Excel读取，这里先用简单数据演示）
# 数据：学科及其对应的成绩
data = {
    '学科': ['语文', '数学', '英语', '物理', '化学'],
    '成绩': [92, 88, 95, 78, 85]
}
df = pd.DataFrame(data)  # 转换为DataFrame，方便处理


# 2. 设置中文显示（避免乱码）
plt.rcParams['font.sans-serif'] = 'SimHei'  # 使用黑体显示中文
# 3. 绘制柱状图
plt.figure(figsize=(8, 5))  # 设置画布大小（宽8英寸，高5英寸）
# 核心绘图：x轴为学科，y轴为成绩，设置柱子颜色和边缘
plt.bar(
    x=df['学科'],  # x轴数据（学科名称）
    height=df['成绩'],  # y轴数据（成绩）
    color='skyblue',  # 柱子颜色（天蓝色）
    edgecolor='black'  # 柱子边缘颜色（黑色，便于区分）
)
# 4. 添加图表细节
plt.xlabel('学科', fontsize=12)  # x轴标签
plt.ylabel('成绩（分）', fontsize=12)  # y轴标签
plt.title('学生各学科成绩对比', fontsize=14, pad=15)  # 标题（pad设置与图表的间距）
plt.grid(axis='y', alpha=0.3, linestyle='--')  # 添加y轴网格线（辅助看数值）
# 5. 显示图表
plt.show()

# 绘制柱状图注释
'''
for i in range(len(df_list)):  # i=0,1,2 分别对应第1、2、3分店
    df_temp = df_list[i]  # 提取当前分店的数据（如i=0时是第1分店）

    # 数据清洗1：删除“数量”列有缺失值的行
    df_temp.dropna(axis=0, subset=['数量'], inplace=True)
    # 解释：
    # - dropna：删除缺失值（NaN）
    # - axis=0：按行删除（如果某行的“数量”是缺失值，就删掉这一行）
    # - subset=['数量']：只检查“数量”列的缺失值（其他列缺失不影响）
    # - inplace=True：直接在原表格上修改（不创建新表格）

    # 数据清洗2：删除完全重复的行
    df_temp.drop_duplicates(inplace=True)
    # 解释：如果表格中存在完全一样的行（可能是录入错误重复），就只保留一行。

    # 按季度分组，计算销售额总和
    df_temp = df_temp.groupby('季度').agg('sum')
    # 解释：
    # - groupby('季度')：按“季度”列的值（如1、2、3、4）分组，将同一季度的行归为一组。
    # - agg('sum')：对每组内的数值列（如“销售额（万元）”“数量”）求和。
    # 结果：得到一个新表格，索引是季度（1-4），列是各数值列的总和（我们只需要“销售额”）。

    # 准备x轴和y轴数据
    x = df_temp.index  # x轴：季度（1、2、3、4）
    height = df_temp['销售额（万元）']  # y轴：对应季度的销售额总和

    # 绘制柱状图（核心！）
    plt.bar(x + width * i, height, width)
    # 关键逻辑：通过x轴偏移实现“分组并排”
    # - 第1分店（i=0）：x坐标 = 季度 + 0.3*0 → 1,2,3,4
    # - 第2分店（i=1）：x坐标 = 季度 + 0.3*1 → 1.3,2.3,3.3,4.3
    # - 第3分店（i=2）：x坐标 = 季度 + 0.3*2 → 1.6,2.6,3.6,4.6
    # 这样3个分店的柱子在同一季度并排显示，不重叠。
'''